#include "widget_assist_backdrop.h"

Widget_Assist_Backdrop::Widget_Assist_Backdrop(QWidget *parent) : QWidget(parent)
{
    
}

void Widget_Assist_Backdrop::drawBackground(QPainter &painter, const QColor &color)
{
    painter.setPen(QPen(color, 0));  // 设置画笔颜色和宽度
    painter.setBrush(QBrush(color, Qt::SolidPattern));  // 设置填充颜色
    QRect rect = this->rect();
    painter.drawRoundedRect(rect, 15, 15);  // 绘制圆角矩形
}

// 绘画事件
void Widget_Assist_Backdrop::paintEvent(QPaintEvent *event)
{
    // 不使用这个变量
    Q_UNUSED(event);

    // 设置画家
    QPainter painter(this);

    // 启用抗锯齿效果，使绘制更加平滑
    painter.setRenderHint(QPainter::Antialiasing);  // 开启抗锯齿

    QColor color;
   if (isPressed) {
       color = QColor(163, 216, 251);  // 按下时的颜色
   } else {
       switch (Mode_Code) {
           case Mode_enter:
               color = QColor(107, 194, 252);  // 鼠标进入时的颜色
               break;
           case Mode_leave:
               color = QColor(204, 235, 255);  // 默认或鼠标离开时的颜色
               break;
           default:
               color = QColor(204, 235, 255);  // 默认颜色
       }
   }


    drawBackground(painter, color);
}
// 鼠标进入
void Widget_Assist_Backdrop::enterEvent(QEvent *event)
{
    // 不使用这个变量
    Q_UNUSED (event);

    // 如果为按下状态 则不设定状态码
    if(this->Mode_Code == Mode_Press)
    {
        return ;
    }

    // 设定状态码
    this->Mode_Code = Mode_enter;

    // 更新图像
    this->update();
}
// 离开事件
void Widget_Assist_Backdrop::leaveEvent(QEvent *event)
{
    // 不使用这个变量
    Q_UNUSED (event);

    // 如果为按下状态 则不设定状态码
    if(this->Mode_Code == Mode_Press)
    {
        return ;
    }

    // 设定状态码
    this->Mode_Code = Mode_leave;

    // 更新图像
    this->update();
}
// 按下事件
void Widget_Assist_Backdrop::mousePressEvent(QMouseEvent *event)
{
    // 不使用这个变量
    Q_UNUSED (event);

    isPressed = !isPressed;  // 切换按下状态

    // 设定状态码
    this->Mode_Code = Mode_Press;

    // 更新图像
    this->update();
}

void Widget_Assist_Backdrop::mouseReleaseEvent(QMouseEvent *event)
{
     // 不使用这个变量
    Q_UNUSED(event);

    if (isPressed) {
        Mode_Code = Mode_Press;  // 如果是按下状态，则保持为按下状态
    } else {
        Mode_Code = Mode_leave;  // 否则恢复到离开状态
    }
        update();
}
